/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
/*
三根指针，p , r pre
p指向第一个结点，r指向第二个结点，r是工作指针，向前遍历
p指向第一个结点为最后一个结点，所以p->next=null;
pre跟随p的步伐，p跟随r的步伐
pre=p;
p=r;
r=r->next;
p->next=pre;//翻转
*/
class Solution {
public:
    ListNode* ReverseList(ListNode* head) {
        if(head==NULL)
            return nullptr;
        ListNode *pre,*r;
        ListNode *p=head;
        r=p->next;
        p->next=NULL;
        
       while(r)
       {
           pre=p;
           p=r;
           r=r->next;
           p->next=pre;
       }
        return p;
    }
};